package visiopuce.ui.listener;

import java.util.Iterator;

import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;

import visiopuce.ApplicationContexte;
import visiopuce.service.AnalyseServiceImpl;
import visiopuce.service.DroitServiceImpl;
import visiopuce.service.PersonneServiceImpl;
import visiopuce.ui.DossierEditorInput;
import visiopuce.ui.tree.AlterationNode;
import visiopuce.ui.tree.AnalyseNode;
import visiopuce.ui.tree.DossierNode;
import visiopuce.ui.tree.PrelevementNode;
import visiopuce.ui.tree.PuceNode;
import visiopuce.ui.tree.ResultatNode;
import visiopuce.ui.tree.TreeNode;
import visiopuce.ui.view.AnalyseTabItem;
import visiopuce.ui.view.DossierEditor;

public class DoubleCliqueResultatRechercheListener implements IDoubleClickListener {

	public void doubleClick(DoubleClickEvent event) {
		// if the selection is empty clear the label
		if (event.getSelection().isEmpty()) {
			System.out.println("la selection dans l'arbre est vide");
			return;
		}
		if (event.getSelection() instanceof IStructuredSelection) {
			IStructuredSelection selection = (IStructuredSelection) event.getSelection();
			StringBuffer toShow = new StringBuffer();
			for (Iterator iterator = selection.iterator(); iterator.hasNext();) {
				try {
					TreeNode child = (TreeNode) iterator.next();
					if (child instanceof DossierNode && DroitServiceImpl.getInstance().peutLireByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "personne")) {
						DossierNode dossierNode = (DossierNode) child;

						IEditorInput editorInput = new DossierEditorInput(dossierNode.getPersonne().getIdPersonne());
						PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().openEditor(editorInput, DossierEditor.ID, true, IWorkbenchPage.MATCH_INPUT);
						IEditorPart editeurActif = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
						if (editeurActif instanceof DossierEditor) {
							DossierEditor editeur = (DossierEditor) editeurActif;
							if (editeur.getDossierTabItem() != null) {
								editeur.getTabFolder().setSelection(editeur.getDossierTabItem().getTabItem());
							} 
						}

					}

					else if (child instanceof PrelevementNode && DroitServiceImpl.getInstance().peutLireByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "prelevement")) {
						PrelevementNode prelevementNode = (PrelevementNode) child;
						IEditorInput editorInput = new DossierEditorInput(PersonneServiceImpl.getInstance().getIdPersonneFromObject(prelevementNode.getPrelevement()));
						PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().openEditor(editorInput, DossierEditor.ID, true, IWorkbenchPage.MATCH_INPUT);
						IEditorPart editeurActif = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
						if (editeurActif instanceof DossierEditor) {
							DossierEditor editeur = (DossierEditor) editeurActif;
							if (editeur.getPrelevementTabItems().containsKey(prelevementNode.getPrelevement().getIdPrelevement())) {
								editeur.getTabFolder().setSelection(editeur.getPrelevementTabItems().get(prelevementNode.getPrelevement().getIdPrelevement()).getTabItem());
							} else {
								editeur.addPrelevementTabItem(prelevementNode.getPrelevement());

							}
						}

					} else if (child instanceof AnalyseNode && DroitServiceImpl.getInstance().peutLireByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "analyse")) {
						AnalyseNode analyseNode = (AnalyseNode) child;
						IEditorInput editorInput = new DossierEditorInput(PersonneServiceImpl.getInstance().getIdPersonneFromObject(analyseNode.getAnalyse()));
						PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().openEditor(editorInput, DossierEditor.ID, true, IWorkbenchPage.MATCH_INPUT);
						IEditorPart editeurActif = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
						if (editeurActif instanceof DossierEditor) {
							DossierEditor editeur = (DossierEditor) editeurActif;
							if (editeur.getAnalyseTabItems().containsKey(analyseNode.getAnalyse().getIdAnalyse())) {
								editeur.getTabFolder().setSelection(editeur.getAnalyseTabItems().get(analyseNode.getAnalyse().getIdAnalyse()).getTabItem());
							} else {
								editeur.addAnalyseTabItem(analyseNode.getAnalyse());

							}
						}

					} else if (child instanceof PuceNode && DroitServiceImpl.getInstance().peutLireByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "puce")) {
						PuceNode puceNode = (PuceNode) child;
						IEditorInput editorInput = new DossierEditorInput(PersonneServiceImpl.getInstance().getIdPersonneFromObject(puceNode.getPuce()));
						PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().openEditor(editorInput, DossierEditor.ID, true, IWorkbenchPage.MATCH_INPUT);
						IEditorPart editeurActif = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
						if (editeurActif instanceof DossierEditor) {
							DossierEditor editeur = (DossierEditor) editeurActif;
							if (editeur.getPuceTabItems().containsKey(puceNode.getPuce().getIdPuce())) {
								editeur.getTabFolder().setSelection(editeur.getPuceTabItems().get(puceNode.getPuce().getIdPuce()).getTabItem());
							} else {
								editeur.addPuceTabItem(puceNode.getPuce());

							}
						}
					} else if (child instanceof AlterationNode && DroitServiceImpl.getInstance().peutLireByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "alteration")) {
						AlterationNode alterationNode = (AlterationNode) child;
						IEditorInput editorInput = new DossierEditorInput(PersonneServiceImpl.getInstance().getIdPersonneFromObject(alterationNode.getAlteration()));
						PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().openEditor(editorInput, DossierEditor.ID, true, IWorkbenchPage.MATCH_INPUT);
						IEditorPart editeurActif = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
						if (editeurActif instanceof DossierEditor) {
							DossierEditor editeur = (DossierEditor) editeurActif;
							if (editeur.getCNVTabItems().containsKey(alterationNode.getAlteration().getIdAlteration())) {
								editeur.getTabFolder().setSelection(editeur.getCNVTabItems().get(alterationNode.getAlteration().getIdAlteration()).getTabItem());
							} else {
								editeur.addCNVTabItem(alterationNode.getAlteration());

							}
						}
					}else if (child instanceof ResultatNode && DroitServiceImpl.getInstance().peutLireByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "resultat")) {
						ResultatNode resultatNode = (ResultatNode) child;
						IEditorInput editorInput = new DossierEditorInput(PersonneServiceImpl.getInstance().getIdPersonneFromObject(resultatNode.getResultat()));
						PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().openEditor(editorInput, DossierEditor.ID, true, IWorkbenchPage.MATCH_INPUT);
						IEditorPart editeurActif = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
						if (editeurActif instanceof DossierEditor) {
							DossierEditor editeur = (DossierEditor) editeurActif;
							if (editeur.getAnalyseTabItems().containsKey(resultatNode.getResultat().getAnalyse().getIdAnalyse())) {
								editeur.getTabFolder().setSelection(editeur.getAnalyseTabItems().get(resultatNode.getResultat().getAnalyse().getIdAnalyse()).getTabItem());
							} else {
								editeur.addAnalyseTabItem(AnalyseServiceImpl.getInstance().getAnalyseByIdAnalyse(resultatNode.getResultat().getAnalyse().getIdAnalyse()));
							}
							AnalyseTabItem ati = editeur.getAnalyseTabItems().get(resultatNode.getResultat().getAnalyse().getIdAnalyse());
							ati.selectResultat(resultatNode.getResultat());
						}
						
					}
				} catch (PartInitException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}

			}
		}

	}
}
